Amazon Lambda 関数で VPC フローログを Splunk Cloud に送信してみた!

Amazon Lambda 関数で VPC フローログを Splunk Cloud に送信してみた!

Clock Icon2024.10.08

10/3、Splunk 社のパートナー向けオフライン勉強会を開催いただき、AWS のデータ取り込みについてセッションを受講してきました。

本ブログでは、セッション内でご説明いただいた Amazon Lambda 関数を使って Splunk Cloud にデータを送信する方法についてご紹介します。

講師およびハンズオンの概要

設定の流れ

  1. HEC トークンを作成する
  2. VPC フローログを CloudWatch に出力する
  3. Splunk Cloud にログを送信する Lambda 関数をデプロイする
  4. Lambda 関数を呼び出すための CloudWatch サブスクリプションフィルターを作成する

構成図

CloudWatch ロググループに出力されるログを Lambda 関数で HEC に送信していきます。

Splunk_Sakuma_20241007_1

それでは早速やってみましょう!

HEC トークンを作成する

HEC トークンを作成するには HTTP Event Collector を作成します。

  1. Setting(設定) > Data Input(データ入力)を選択
  2. HTTP Event Collector を選択
  3. New Token(新規トークン)を選択
  4. HEC Token の Name を入力(例:画像)
  5. 任意で Enable Indexer ack knowledgement を設定する

Enable Indexer ack knowledgement は、取り込んだデータの重複や欠落を防ぐための機能です。Splunk Cloud では、データ取り込みパイプラインに Amazon Data Firehose を使う場合に限り、有効化することで Splunk がデータを Indexer に登録した後、ackID というものを発行し、フォワーダーへ通知をする仕組みになっており、ユーザ環境と Splunk Cloud 間での NW 断絶や Splunk インスタンスの停止などに備え、ackID を受けたデータが Indexer に登録されていることを証明するように動作させることができます。
参考:About HTTP Event Collector Indexer Acknowledgment | Splunk Docs

  1. NEXT を選択

  2. ソースタイプの欄で select(選択)の項目を選択する

  3. Select Source Type(ソースタイプの選択)を選択し、既存のソースタイプを選択するか、ここで新たに作成する

  4. 任意のインデックスを選択する

  5. review(確認)して問題なければ Submit(実行)する

Splunk_Sakuma_20241007_3

  1. 払い出された HEC Token をどこかにコピーする

Splunk_Sakuma_20241007_4

VPC フローログを CloudWatch に出力する

VPC フローログの配信には、CloudWatch ロググループと IAM ロールが必要なので先に作成していきます。

CloudWatch ロググループの作成

VPC フローログの出力先となる Amazon CloudWatch ロググループを作成します

  1. AWS コンソールで CloudWatch を開き「ロググループ」を選択
  2. 「ロググループを作成」を選択

Splunk_Sakuma_20241007_6

  1. ロググループ名を入力
  2. 任意の保持期間を選択
  3. 任意のログクラスを選択
  4. 任意で KMS キーを選択
  5. 作成を選択し、ARN をコピーしてどこかに保存

IAM ポリシーの作成

IAM ロールに付与する IAM ポリシーを作成します

  1. AWS コンソールで IAM を開き「ポリシー」を選択
  2. 「ポリシーを作成」を選択

Splunk_Sakuma_20241007_8

  1. ポリシーエディタにCloudWatch Logs にフローログを公開するための IAM ロールの権限付与し、Resource ノードに先ほどコピーした CloudWatch ロググループの ARN をペースト
  2. ポリシー名を入力して、ポリシーの作成を選択

Splunk_Sakuma_20241007_9

IAM ロールの作成

VPC フローログを Amazon CloudWatch ロググループに発行するアクセス許可を持つ IAM ロールを作成します

  1. AWS コンソールで IAM を開き「ロール」を選択
  2. 「ロールを作成」を選択
  3. 信頼されたエンティティで「カスタム信頼ポリシー」を選択

Splunk_Sakuma_20241007_7

  1. カスタム信頼ポリシーで「CloudWatch Logs にフローログを公開するための IAM ロール」ページの信頼ポリシーをペーストして次へを選択

Splunk_Sakuma_20241007_7-1

  1. 許可ポリシーで先ほど作成した IAM ポリシーを追加して次へを選択
  2. ロール名を入力して「ロールを作成」を選択

Splunk_Sakuma_20241007_11

VPC フローログの作成

  1. AWS コンソールで VPC を開き「お使いの VPC」を選択
  2. ログ収集対象の VPC を選択
  3. 「フローログ」を選択し、「フローログを作成」を選択

Splunk_Sakuma_20241007_5

  1. 名前を入力
  2. 最大集約間隔を任意で選択
  3. 送信先で「CloudWatch Logs に送信」を選択
  4. 送信先ロググループに先ほど作成したロググループを選択
  5. IAM ロールに先ほど作成した IAM ロールを選択

Splunk_Sakuma_20241007_13

  1. フローログを作成を選択

一度、CloudWatch でロググループに VPC フローログが出力されているか確認してみましょう。
CloudWatch > ロググループ で作成したロググループを選択します。

Splunk_Sakuma_20241007_14

ログストリームが生成されているはずです。中身も見てみます。

Splunk_Sakuma_20241007_15

適切に出力されていることを確認できました。ここまでこれば、あとは Lambda を使って Splunk Cloud に送信するだけです。

Splunk Cloud にログを送信する Lambda 関数をデプロイする

Lambda 関数は、Serverless Application Repository に公開されているリソースを使えます。

  1. AWS コンソールで Serverless Application Repository を開き「使用可能なアプリケーション」を選択
  2. 検索バーで「splunk-aws-lambda-cloudwatchlogs-processor」を検索
  3. 「splunk-aws-lambda-cloudwatchlogs-processor」を選択

Splunk_Sakuma_20241007_16

  1. アプリケーションの設定を入力してデプロイする
    • DebugData:デバッグ用にデータを表示するかどうか
    • ELBCookieName:ELB リソースの Cookie 名
    • HTTPRequestTimeout:HTTP リクエストのタイムアウト秒数
    • HTTPVerifySSL:HTTPリクエストのSSLを検証するかどうか
    • SplunkAcknowledgementRequired:HEC ackID を確認するかどうか
    • SplunkAcknowledgementRetries:HEC ackID 確認応答の試行回数
    • SplunkAcknowledgementWaitSeconds:HEC ackID を確認応答するまでの待機秒数
    • SplunkHttpEventCollectorToken:HEC トークン
    • SplunkHttpEventCollectorType:生のイベントは(raw)、json イベントは(event)
    • SplunkHttpEventCollectorURL:HEC エンドポイント URL
    • SplunkSourceType:HEC のソースタイプ

Splunk_Sakuma_20241007_17

  1. デプロイしたら、リソースの物理 ID を覚えておいてください。

Splunk_Sakuma_20241007_18

  1. CloudWatch のサブスクリプションフィルターを作成する

Lambda 関数を呼び出すための CloudWatch サブスクリプションフィルターを作成する

先ほど作成した Lambda 関数は Splunk Cloud にログを Push するためのもので、これから作成するのは、その Lambda 関数を呼び出すための仕掛けです。

  1. AWS コンソールで CloudWatch を開き、ロググループを選択
  2. サブスクリプションフィルターのタブで、作成から「Lambda サブスクリプションフィルターを作成」を選択

Splunk_Sakuma_20241007_19

  1. Lambda 関数の項で、先ほどデプロイした Lambda 関数の物理 ID があるもの選択
  2. サブスクリプションフィルター名を入力
  3. あとはデフォルトのまま「ストリーミングを開始」を選択

Splunk_Sakuma_20241007_20

ここまで完了すれば、Splunk Cloud にログが流れているはずです!お疲れ様でした!

Search & Reportings で確認してみましょう。

index="aws-data" sourcetype="aws:cloudwatchlogs:vpcflow"

Splunk_Sakuma_20241007_21

しっかりログが入っていますね!

まとめ

Lambda 関数を使って Splunk Cloud にログを送信してみました!
Lambdaは実行時間に基づいた課金モデルなので、ログを送信する頻度や量に応じて採用したいところですね!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.